package com.maimang.platform.crm.util;

import com.maimang.platform.base.Result;
import com.maimang.platform.common.entity.SysUser;
import com.maimang.platform.common.utils.JwtUtils;
import com.maimang.platform.common.utils.cache.EHCacheUtil;
import com.maimang.platform.common.utils.http.ServletUtils;
import com.maimang.platform.enums.Status;
import com.maimang.platform.lang.StringUtils;
import com.maimang.platform.tool.ToolJackson;

/**
 * @classname TokenUtil
 * @description <br>移动端token相关</br>
 * @author  Rocky
 * @date    2019-10-14 0:27
 * @email   jintaozhao@qq.com
 * @version 1.0.0
 */
public class TokenUtil {

	public static Result verifyToken(String token) throws Exception {
		// 执行认证
		if (StringUtils.isEmpty(token)) {
			return Result.FAIL(Status.token_without);
		}
		// 先从缓存中取,缓存里已经能取到,说明token是正确有效的,缓存有效时间和token的一样
		Object cache = EHCacheUtil.get(token);
		if (cache != null) {
			return null;
		}
		// 缓存中不能取到，那就处理后将数据缓存下来
		String verifyStr = JwtUtils.verifyToken(token);
		if (StringUtils.isNotEmpty(verifyStr)) {
			// 缓存用户token信息
			long liveTime = JwtUtils.getLiveTime(token);
			// 即将过期
			if (liveTime < 2000) {
				return Result.FAIL(Status.token_invalid);
			}
			SysUser user = ToolJackson.toObject(verifyStr, SysUser.class);
			EHCacheUtil.setValue("jwt", token, user, (int) liveTime / 1000);
			return null;
		} else {
			return Result.FAIL(Status.token_invalid);
		}
	}
    
}
